/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package utilidades.dialog;

import java.io.IOException;
import java.net.URL;
import java.util.HashMap;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;

/**
 * FXML Controller class
 *
 * @author oscar
 */
public class DialgoFXML extends VBox {

    @FXML
    private VBox root;
    @FXML
    private StackPane panelImagen;
    @FXML
    private Label mensaje;
    @FXML
    private Label tituloInterno;
    @FXML
    private HBox panelBotones;
    @FXML
    private ImageView imagenError;
    @FXML
    private ImageView imagenSuccess;
    @FXML
    private ImageView imagenQuestion;
    @FXML
    private ImageView imagenInfo;
    @FXML
    private ImageView imagenWarning;
    private int nroBotonSeleccionado = -1;
    private HashMap<Button, Integer> botonesNumero;

    public DialgoFXML() {
        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("DialgoFXML.fxml"));
        fxmlLoader.setRoot(this);
        fxmlLoader.setController(this);

        try {
            fxmlLoader.load();
        } catch (IOException exception) {
            throw new RuntimeException(exception);
        }
    }

    public int getNroBotonSeleccionado() {
        return this.nroBotonSeleccionado;
    }

    /*
     message: El mensaje a mostrar, habitualmente un String, aunque vale cualquier Object cuyo método toString() devuelva algo con sentido.
     title: El título para la ventana.
     optionType: Un entero indicando qué opciones queremos que tenga la ventana. Los posibles valores son las constantes definidas en JOptionPane: DEFAULT_OPTION, YES_NO_OPTION, YES_NO_CANCEL_OPTION, o OK_CANCEL_OPTION.
     messageType: Un entero para indicar qué tipo de mensaje estamos mostrando. Este tipo servirá para que se determine qué icono mostrar. Los posibles valores son constantes definidas en JOptionPane: ERROR_MESSAGE, INFORMATION_MESSAGE, WARNING_MESSAGE, QUESTION_MESSAGE, o PLAIN_MESSAGE
     icon: Un icono para mostrar. Si ponemos null, saldrá el icono adecuado según el parámetro messageType.
     options: Un array de objects que determinan las posibles opciones. Si los objetos son componentes visuales, aparecerán tal cual como opciones. Si son String, el JOptionPane pondrá tantos botones como String. Si son cualquier otra cosa, se les tratará como String llamando al método toString(). Si se pasa null, saldrán los botones por defecto que se hayan indicado en optionType.
     initialValue: Selección por defecto. Debe ser uno de los Object que hayamos pasado en el parámetro options. Se puede pasar null. 
     */
    public void showOptionDialog(String message, String titleInterno, int messageType, String[] options) {
        setearImagen(messageType);
        if (titleInterno != null) {
            this.tituloInterno.setText(titleInterno);
        }
        if (message != null) {
            this.mensaje.setText(message);
        }

        if (options != null) {
            botonesNumero = new HashMap();

            for (int index = 0; index < options.length; index++) {
                String textoBoton = options[index];
                Button boton = new Button(textoBoton);
                botonesNumero.put(boton, index);
                boton.setOnAction(new EventHandler<ActionEvent>() {
                    @Override
                    public void handle(ActionEvent e) {
                        nroBotonSeleccionado = botonesNumero.get(((Button) e.getSource()));
                        root.getScene().getWindow().hide();
                    }
                });
                this.panelBotones.getChildren().add(boton);
            }
        }


    }

    private void setearImagen(int messageType) {
        panelImagen.getChildren().clear();
        if (messageType == OptionPane.SUCESS_MESSAGE) {
            panelImagen.getChildren().add(this.imagenSuccess);
            return;
        }
        if (messageType == OptionPane.ERROR_MESSAGE) {
            panelImagen.getChildren().add(this.imagenError);
            return;
        }
        if (messageType == OptionPane.INFORMATION_MESSAGE) {
            panelImagen.getChildren().add(this.imagenInfo);
            return;
        }
        if (messageType == OptionPane.QUESTION_MESSAGE) {
            panelImagen.getChildren().add(this.imagenQuestion);
            return;
        }
        if (messageType == OptionPane.WARNING_MESSAGE) {
            panelImagen.getChildren().add(this.imagenWarning);
            return;
        }
        if (messageType == OptionPane.PLAIN_MESSAGE) {
            return;
        }
    }
}
